package com.define.ssh.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.springframework.transaction.annotation.Transactional;
import com.define.ssh.dao.impl.BasicDao;
import com.define.ssh.util.PageSupport;

/**
 * 
 * @Title: BasicService.java
 * @Package com.congbuy.common.base
 * @Description: TODO
 * @author agu
 * @date 2012-6-14 下午6:07:03
 */

public interface BasicIService {

	/**
	 * 新增记录
	 * 
	 * @param entity
	 * @throws com.sjlm.common.ServiceException
	 */
	@Transactional
	public void save(final Object entity);

	@Transactional
	public void saveOrupdate(final Object entity);

	/**
	 * 更新记录
	 * 
	 * @param entity
	 * @throws com.sjlm.common.ServiceException
	 */
	@Transactional
	public void update(final Object entity);

	/**
	 * 删除记录
	 * 
	 * @param entity
	 * @param id
	 * @throws com.sjlm.common.ServiceException
	 */
	@Transactional
	public void delete(final Class entity, final Serializable id);

	/**
	 * 删除记录
	 * 
	 * @param obj
	 * @throws com.sjlm.common.ServiceException
	 */
	@Transactional
	public void delete(final Object obj);

	/**
	 * 根据ID获取对象
	 * 
	 * @param entity
	 * @param id
	 * @return
	 * @throws com.sjlm.common.ServiceException
	 */
	public <T> T get(final Class<T> entity, final Serializable id);

	/**
	 * 所有对象列表
	 * 
	 * @param entity
	 * @return
	 * @throws com.sjlm.common.ServiceException
	 */
	public List findAll(final Class entity);

	public List findByQuery(final String query);

	public List findBySqlQuery(final String sql);

	/**
	 * 通过Query查询 单参数
	 * 
	 * @param query
	 * @param parameter
	 * @return
	 * @throws com.sjlm.common.ServiceException
	 */
	public List findByQuery(final String query, final Object parameter);

	/**
	 * 通过Query查询 多参数
	 * 
	 * @param query
	 * @param parameter
	 * @return
	 * @throws com.sjlm.common.ServiceException
	 */
	public List findByQuery(final String query, final Object[] parameter);

	/**
	 * 执行一个hql语句
	 * 
	 * @param hql
	 */
	public int execute(String hql);

	/**
	 * 执行sql 更新,删除 操作
	 * 
	 * @param sql
	 * @return
	 */
	public int executeSql(String sql);

	/**
	 * 执行hql操作
	 * 
	 * @param hql
	 * @param value
	 * @return
	 * @throws com.sjlm.common.ServiceException
	 */
	public int execute(final String hql, final Object value);

	/**
	 * 
	 * @param hql
	 * @param values
	 * @return
	 * @throws ServiceException
	 */
	public int execute(final String hql, final Object[] values);

	/**
	 * 分页查询
	 * 
	 * @param dc
	 * @param pageSize
	 * @param pageNo
	 *            从1开始的页数
	 * @return PaginationSupport
	 * @throws ServiceException
	 */
	public PageSupport findPageOnPageNo(final DetachedCriteria dc,
			final int pageSize, final int pageNo);

	/**
	 * 查询sql语句的count
	 * 
	 * @param sql
	 * @return
	 */

	public long findCountBySql(final String sql);

	/**
	 * 条件查询
	 * 
	 * @param dc
	 * @return
	 * @throws com.sjlm.common.ServiceException
	 */
	public List findByCriteria(final DetachedCriteria dc);

	/**
	 * 搜索指定数量的数据
	 * 
	 * @param dc
	 * @param count
	 * @return
	 */
	public List findByCriteria(final DetachedCriteria dc, final int count);

	/**
	 * 分页查询
	 * 
	 * @param dc
	 * @param page
	 * @return PageSupport
	 * @throws ServiceException
	 */
	public PageSupport findPageOnPageNo(final DetachedCriteria dc,
			PageSupport page);

	/**
	 * 查询指定数量的对象
	 * 
	 * @param query
	 * @param parameter
	 * @return
	 */
	public List findNumList(final String query, final int resultcount);

	/**
	 * 查询符合条件的记录条数
	 * 
	 * @param dc
	 * @return
	 * @throws com.sjlm.common.ServiceException
	 */
	public int getCountByCriteria(final DetachedCriteria dc);

	/**
	 * 
	 * @Description: TODO
	 * @return
	 */
	public BasicDao getBasicDao();

	/**
	 * 
	 * @Description: TODO
	 * @param basicDao
	 */
	public void setBasicDao(BasicDao basicDao);
}